// 项目入口文件

// 加载模块
const express = require('express')
const path = require('path')
const usersRouter = require('./routers/usersRouter.js')
const goodsRouter = require('./routers/goodsRouter.js')
const cors = require('cors')

// 创建express实例
const app = express()

// 使用 cookie-parser 插件来解析cookie数据
// 安装: npm i cookie-parser
// 加载模块
let cookieParser = require('cookie-parser')
// 使用cookieParser插件
app.use(cookieParser())
// 使用cookieParser插件之后: 
// 1.在req请求对象上添加了一个cookies属性(用于获取客户端的cookie数据)
// 2.在res响应对象上有一个cookie方法(用于设置客户端的cookie数据)


// session会话控制
// http协议是无状态的，当前请求和上一次请求没有对应关系
// 在web应用中cookie是一种记录用户状态的机制
// 在web应用中session是一种记录用户状态的机制
// cookie存储在浏览器，session存储在服务器
// 使用 express-session 插件来操作session
// 安装：npm i express-session
// 加载模块
let session = require('express-session')
//  使用插件
app.use(session({// session的配置项
    secret: 'hehehaha',// 加密口令
    resave: true,// 重新保存session
    saveUninitialized: false,// 是否保存未初始化的session，默认为true
    name: 'nicai',// cookie名称，默认为 'connect.sid'
    cookie: {
        maxAge: 1000*60*30,// cookie的有效期，毫秒
        domain: 'localhost',// cookie的域名
        path: '/'// cookie的路径
    }
}))
// 使用插件之后：
// session = session id + session data
// 1.session的一部分叫session id，通过cookie存储在浏览器
// 2.session的另一部分叫session data，存储在服务器（内存或数据库）
// 3.再次访问服务时，插件根据前端携带的session id自动匹配到对应的session data，然后将session data添加到req对象的session属性{session data}

// 设置cors跨域资源共享
app.use(cors())

// 连接数据库
require('./db/connect.js')

// 解析请求体中的x-www-form-urlencoded数据
app.use(express.urlencoded({extended:false}))

// 解析请求体中的json数据
app.use(express.json())

// 使用路由表去匹配用户请求
app.use('/users',usersRouter)
app.use('/goods',goodsRouter)

// 设置静态资源目录www
app.use('/static',express.static(path.join(__dirname,'www')))

// 监听端口
app.listen(8080,()=>{
    console.log( '---------服务启动成功---------' )
})
